---
id: lab4-intro
slug: /labs/lab4
sidebar_position: 1
---

# Шаблоны классов

Алиас: `Стек`.

## Задание

Дано описание класса `MyStack` ([Приложение 1](Instructions/SupplementMaterial1.md), файл `MyStack.h`), который реализует на основе односвязного списка динамическую структуру данных типа стек.

1. Разработайте реализацию класса `MyStack`.

    :::caution
    Обратите внимание на то, что за основу объявления классов `ListNode` и `MyStack` вам нужно взять код заголовочного файла `MyStack.h`, приведенный в [Приложении 1](Instructions/SupplementMaterial1.md). Реализацию данных классов (определение методов) вам также придется описывать в том же заголовочном файле, в котором будут содержаться объявления данных классов. В данном случае в файле `MyStack.h`. О причинах невозможности разделить объявление от реализации класса описано также в [Приложении 1](Instructions/SupplementMaterial1.md).
    :::

2. Разработайте функцию (глобальную), которая выполняет разложение на простые множители целого числа `N`. Для хранения множителей функция должна использовать класс `MyStack`. Прототип функции: `void Multipliers(int n, MyStack<DATA> &stack)`.
3. В функции `main()` распечатайте множители, которые функция `Multipliers()` записывает в стек, сначала по убыванию, а потом по возрастанию. Например, для `N=3960` программа должна вывести:

    ```text
    3960=11 * 5 * 3 * 3 * 2 * 2 * 2
    3960=2 * 2 * 2 * 3 * 3 * 5 * 11
    ```

4. Классы `ListNode` и `MyStack` необходимо упаковать в самостоятельную статическую библиотеку.

:::caution
Не забудьте реализовать конструкторы копирования и перегрузки оператора `=` для `ListNode` и `MyStack`.
:::

## Режимы выполнения программы

В данной лабораторной работе разделение на демонстрационный и интерактивный режим не требуется. Достаточно продемонстрировать работу функций класса `MyStack` так, как это указано в задании. При необходимости при очной демонстрации необходимо будет менять числа в коде программы и пересобирать программу для показа.

## Методический материал

1. [Указания по выполнению работы](Instructions/intro.md)
2. [Контрольные вопросы](./TestQuestion.md)
